home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1996 #15 / Monster Media Number 15 (Monster Media)(July 1996).ISO / prog_bas / pbc32.zip / PBCLONE.DOC < prev    next >
Text File  |  1996-04-10  |  54KB  |  1,154 lines

  1.                       The PBClone Library
  2.                     =---------------------=
  3.                           Version 3.2
  4.  
  5.  PBCLONE  (C) Copyright 1996 Charon Software, All Rights Reserved
  6.  
  7.  
  8.  
  9. Use of LIBWIZ is strongly recommended for creating the initial
  10. PBClone library. You should be able to get this utilities from
  11. the same place you got this library.
  12.  
  13. This is PBClone, a library of over 610 assembly language and
  14. BASIC routines for use with Microsoft's BASIC compilers: Bascom,
  15. PDS, QuickBasic and Visual BASIC for DOS. The PBClone collection
  16. is copyrighted and may be distributed only under the following
  17. conditions:
  18.  
  19.    All PBClone files must be distributed together as a unit.
  20.    No files may be altered, added, or deleted from this unit.
  21.    Assembly language source code may not be distributed.
  22.  
  23. YOU USE THIS LIBRARY AT YOUR OWN RISK. I have tested it on my
  24. own computer, but I will not assume any responsibility for any
  25. problems which PBClone may cause you.
  26.  
  27. It is expected that if you find PBClone useful, you will
  28. register your copy. You may not use PBClone routines in programs
  29. intended for sale unless you have registered.
  30.  
  31. Registration gets you the latest version of PBClone, complete
  32. with full source code. The assembly language code is designed
  33. for MASM 6.0 and may require alteration for other assemblers.
  34.  
  35. The BLDLIB.BAT file automates the creation of a complete PBClone
  36. library. Check it out for further details, or follow the manual
  37. installation procedure outlined below.
  38.  
  39. You will need to have a complete set of PBClone .OBJ files for
  40. LibWiz to work. Create a fresh subdirectory and extract the
  41. BASIC sources from PBC30B.ZIP (or .LZH, etc). Compile them all.
  42. The following DOS command will do it:
  43.  
  44.    FOR %x IN (*.BAS) DO BC %x /o;
  45.  
  46. Now extract the .OBJ files from PBC$MAIN.LIB into the same
  47. directory, using the UnLib utility that comes with LibWiz.
  48. Finally, extract the .OBJ files from PBC$NEAR.LIB as well. This
  49. gives you a complete set of .OBJs for PBClone, allowing LibWiz
  50. to create a custom PBClone library for you.
  51.  
  52. The VB-DOS compiler always uses far strings. For it, you must
  53. use the .OBJs from PBC$FAR.LIB instead of PBC$NEAR.LIB.
  54.  
  55. With PDS, you have a choice between near and far strings. To use
  56. far strings, use the /FS switch when compiling, and use the
  57. .OBJs from PBC$FAR.LIB instead of PBC$NEAR.LIB.
  58.  
  59.                       Creating .QLB files
  60.  
  61.  
  62.  
  63. If you like to use the BASIC editor/environment, you will need
  64. to create a .QLB version of the library to complement the .LIB
  65. version. LIBWIZ can do it for you, or you can do it manually.
  66. This is done using the LINK.EXE utility that came with your
  67. compiler. The exact parameters differ slightly depending on
  68. which version of the compiler you have. For QuickBasic, it looks
  69. something like this:
  70.  
  71.    LINK libname.LIB/Q/SE:1024,libname.QLB,NUL,BQLB45;
  72.  
  73. The BQLB45 file is for QuickBasic 4.5. This should be replaced
  74. by BQLB40 or BQLB41 for QuickBasic 4.0 (check your files to see
  75. which you have). For BASCOM 6.0-7.1, also called Professional
  76. Development System or PDS, use QBXQLB instead of BQLB45. For
  77. VB-DOS, use VBDOSQLB instead of BQLB45.
  78.  
  79.                       The TSR File Viewer
  80.  
  81.  
  82.  
  83. Since there are hundreds of routines in PBClone, it isn't always
  84. exactly easy to remember which routine you want or how to use
  85. it. This is a particular problem when you're in the middle of
  86. writing a program. So, I've written a TSR file viewer... it's
  87. crude, but it gets the job done.
  88.  
  89. Just type "FV" to install the TSR. Alt-V activates it. "FV /D"
  90. removes it from memory.
  91.  
  92.      !!! ----== NOTE ==---- !!!
  93. Please check FV with a nonessential application first! It
  94. appears to work fine in the QuickBasic environment, but it locks
  95. up my favorite editor, so I can't guarantee that it will behave
  96. properly in all circumstances.
  97.  
  98. First, FV will ask you for the file to view. This may contain
  99. drive and subdirectory information as well as the file name.
  100. Second, you will be asked for a search string. If you enter a
  101. search string, viewing will start at the part of the file that
  102. contains that search string. If you just press enter, viewing
  103. will start at the beginning of the file. The file will be
  104. presented to you one page at a time. I suggest viewing
  105. PBCLONE.DOC or PBCLONE.INF.
  106.  
  107. FV was written in BASIC using Crescent's P.D.Q. library, with
  108. the "simplified" TSR handler (which doesn't seem to have been
  109. entirely debugged). Then again, TSRs are a tricky matter,
  110. especially with BASIC...
  111.  
  112.                          General Notes
  113.  
  114.  
  115.  
  116. The initial version of PBClone had only one manual. However,
  117. since there are so many routines, I've split the manual into a
  118. general documentation file and a reference manual. You won't
  119. want to print PBCLONE.MAN unless you have a lot of time and
  120. printer paper! In contrast, this file (PBCLONE.DOC) has been
  121. kept small to allow ready printing. It contains general notes,
  122. cross-reference listings of the routines, and assorted charts.
  123.  
  124. Many of the routines in PBClone are similar to routines of the
  125. same name in ADVBAS and/or ProBas. The key here is "similar"--
  126. they don't necessarily work the same way and may not produce the
  127. same results. If you intend to convert from ADVBAS or ProBas to
  128. PBClone, read the documentation carefully.
  129.  
  130. When a PBClone returns a Boolean (on or off) value, it will
  131. always be 0 if off, -1 if on; this is unlike ProBas, which would
  132. often return any non-zero value for an "on" state. Booleans
  133. passed to PBClone may still use any non-zero value to indicate a
  134. "true" or "on" condition, however.
  135.  
  136. Critical error handling has been incorporated into all disk and
  137. device routines. You will never have to worry about "R>etry,
  138. A>bort, I>gnore" again, so long as you use PBClone for your disk
  139. and device management.
  140.  
  141. PBClone file handling is very flexible but may be confusing to
  142. people used to BASIC's strongly-moded files. PBClone file
  143. handling is most similar to BASIC files opened in BINARY mode.
  144. You may read or write any amount of information at a time. After
  145. each read or write takes place, the file pointer is updated
  146. appropriately, so you can use sequential access techniques
  147. without further effort. Random access is also possible, using
  148. FSetLoc/FSetOfs/FSetRec to set the file pointer position. Those
  149. of you who are familiar with C or Pascal file handling will
  150. notice strong similarities in this approach, which is based on
  151. techniques that have long been standard in the industry.
  152.  
  153. Many routines are available both as SUBprograms and as
  154. FUNCTIONs. The former is for compatibility with older programs
  155. which were designed before BASIC was capable of using FUNCTIONs.
  156. You may use either, of course, although the FUNCTION version of
  157. a routine is often more convenient.
  158.  
  159.                          General Notes
  160.  
  161.  
  162.  
  163. The PBClone library can be used in conjunction with other
  164. libraries. If there is a conflict in routine names between the
  165. two libraries, the OBJTOOL utility can be used to rename one or
  166. the other routine. Due to the large size of PBClone, you will
  167. probably need to select just the routines you need, rather than
  168. combining the entire libraries, in order to avoid overflowing
  169. LINK limitations. OBJTOOL can help you find out which routines
  170. are in what modules. The LIB utility can be used to alter
  171. existing libraries, or you can build your own custom libraries
  172. from the ground up, using LibWiz. See the LIB_BI.DOC and
  173. LIBRARY.TXT files if you are not familiar with libraries.
  174.  
  175. LibMatic, LibWiz and ObjTool are included on the sampler disk
  176. that comes with the registered version of PBClone. They should
  177. also be available at your local BBS.
  178.  
  179. If you have not used ADVBAS, ProBas, or PBClone before, you may
  180. be unfamiliar with the array handling conventions used here. In
  181. almost all array routines, you will see a pair of parameters
  182. (e.g. DSeg% and DOfs%) used to represent an array. These values
  183. are obtained by the BASIC functions VARSEG and VARPTR:
  184.  
  185.    DSeg% = VARSEG(Array(1))    ' or whatever the first...
  186.    DOfs% = VARPTR(Array(1))    ' ...desired element may be
  187.  
  188. This is the way that current versions of QuickBasic and BASCOM
  189. pass arrays, TYPEd values, and fixed-length STRING values to
  190. assembly-language routines. It tells the routine where in memory
  191. to find the value(s). Since these values may move around in
  192. memory, it is important to get the VARSEG and VARPTR just before
  193. you call the routine. Any routine that accepts a segment and an
  194. offset can be used with arrays, TYPEd values, and fixed-length
  195. strings interchangeably. This allows for considerable
  196. flexibility.
  197.  
  198. Virtually all of the variables used in PBClone are integers. In
  199. this manual, integers are indicated specifically by use of the
  200. "%" integer postfix. The use of DEFINT A-Z in your program will
  201. cause your variables to be integers by default, which I would
  202. recommend unless you use floating point heavily.
  203.  
  204.                          General Notes
  205.  
  206.  
  207.  
  208. Most of the routines in ProBas (and all of the routines in
  209. ADVBAS) did not require a DECLARE if the CALL syntax was used.
  210. This is not true of PBClone, which requires DECLAREs. There are
  211. numerous advantages to this:
  212.  
  213.    1) BASIC can more easily detect syntax errors.
  214.    2) You may use CALL or the new simplified syntax.
  215.    3) Many of the routines are smaller and faster due to
  216.       use of the DECLARE option BYVAL.
  217.  
  218. The DECLAREs are generated in a .BI file by LIBWIZ. Assuming you
  219. named the library PBC, you can include the DECLAREs in your
  220. program with this statement:
  221.  
  222.    REM $INCLUDE: 'PBC.BI'
  223.  
  224. The PBC.BI file must be in the same directory as your program,
  225. or you can put it into a specific directory by setting an
  226. environment variable. I keep my include files in a directory
  227. called C:\INCLUDE, so I have the following line in my
  228. AUTOEXEC.BAT:
  229.  
  230.    SET INCLUDE=C:\INCLUDE
  231.  
  232. As mentioned, there are now two ways of calling any subprogram.
  233. You can use the CALL keyword or an implicit call. In the case of
  234. the CopyFile routine, for instance, you could use either of
  235. these calls interchangeably:
  236.  
  237.    CALL CopyFile (FromFile$, ToFile$, ErrCode%)
  238.  
  239.    CopyFile FromFile$, ToFile$, ErrCode%
  240.  
  241. The latter technique is more elegant, to my tastes, and is the
  242. one used throughout the PBClone documentation and examples. You
  243. may use whichever method you prefer-- BASIC generates the same
  244. code either way.
  245.  
  246. How you capitalize the names of the variables and routines is up
  247. to you. I like mixed uppercase and lowercase, but it really
  248. doesn't matter. You can also change the names of the variables
  249. or even replace them with constants, as long as you maintain the
  250. correct type:
  251.  
  252.    COPYfile "C:\AUTOEXEC.BAT", "A:AUTOEXEC.BAT", errornumber%
  253.  
  254.                          General Notes
  255.  
  256.  
  257.  
  258. If you have registered PBClone and wish to reassemble all of the
  259. routines written in assembly language, first place these
  260. routines in their own subdirectory. Then:
  261.  
  262.    FOR %x IN (*.ASM) DO MASM %x ;
  263.  
  264. Note that you will need to use "%%x" instead of "%x" if you
  265. place this statement in a batch file.
  266.  
  267. The .OBJ files created by this process will be compatible with
  268. QuickBasic strings and PDS near strings. If you have PDS and
  269. would like to create a far string version of PBClone, you must
  270. set the FarString label when assembling. Far strings are also
  271. required for the VB-DOS compiler.
  272.  
  273.    FOR %x IN (*.ASM) DO MASM %x /DFarString ;
  274.  
  275. You can most readily create a library from the resulting .OBJ
  276. files by using the LibMatic or LibWiz utilities. Due to the size
  277. of PBClone, manual library creation is not recommended.
  278.  
  279. If you find any bugs or problems with PBClone, or have any
  280. suggestions to make, please let me know. You can reach me
  281. through any of the BBSes listed in WHERE.BBS, or write to me by
  282. conventional mail. Please DO NOT call me directly! I loathe a
  283. ringing phone. Phones were meant for modem use only!
  284.  
  285.                        Routine Reference
  286.  
  287.  
  288.  
  289. Array Management:
  290.    AddMatI       add to each element of an integer array
  291.    AddMatL       add to each element of a long integer array
  292.    BinSeekD      search a sorted array of double-precision nos.
  293.    BinSeekI      search a sorted array of integers
  294.    BinSeekL      search a sorted array of long integers
  295.    BinSeekS      search a sorted array of single-precision nos.
  296.    BinSeekSt     search a sorted array of strings
  297.    DRecDel       delete a record or element from an array
  298.    DRecIns       insert a record or element into an array
  299.    InitPtr       initialize an array of pointers
  300.    MatShuffleD   shuffle an array of double-prec numbers
  301.    MatShuffleI   shuffle an array of integers
  302.    MatShuffleL   shuffle an array of long integers
  303.    MatShuffleS   shuffle an array of single-prec numbers
  304.    MatShuffleSt  shuffle an array of strings
  305.    MeanAverageD  calculate the average of a double-prec. array
  306.    MeanAverageI  calculate the average of an integer array
  307.    MeanAverageL  calculate the average of a long integer array
  308.    MeanAverageS  calculate the average of a single-prec. array
  309.    MulMatI       multiply each element of an integer array
  310.    PSortD        pointer-sort a double-prec. array
  311.    PSortI        pointer-sort an integer array
  312.    PSortL        pointer-sort a long integer array
  313.    PSortS        pointer-sort a single-prec. array
  314.    PSortSt       pointer-sort a string array
  315.    ReverseD      reverse the elements in a double-prec. array
  316.    ReverseI      reverse the elements in an integer array
  317.    ReverseL      reverse the elements in a long integer array
  318.    ReverseS      reverse the elements in a single-prec. array
  319.    ReverseSt     reverse the elements in a string array
  320.    SetMatD       set each element of a double-precision array
  321.    SetMatI       set each element of an integer array
  322.    SetMatL       set each element of a long integer array
  323.    SetMatS       set each element of a single-precision array
  324.    SortD         sort an array of double-precision numbers
  325.    SortI         sort an array of integers
  326.    SortL         sort an array of long integers
  327.    SortS         sort an array of single-precision numbers
  328.    SortSt        sort an array of strings
  329.  
  330.                       Routine Reference
  331.  
  332.  
  333.  
  334. Disk:
  335.    BootDrive$    determine the drive used to boot the computer
  336.    CDROM         see if a CD-ROM is installed and get info
  337.    CheckDisk     see if a disk is ready to be accessed
  338.    CheckDsk%     see if a disk is ready to be accessed
  339.    CheckShare    determine whether SHARE is installed
  340.    CheckShare2%  determine whether SHARE is installed
  341.    Cylinders%    get number of cylinders for a given drive
  342.    DblSpace%     determine whether DBLSPACE is installed
  343.    DelSub        delete a subdirectory
  344.    DiskStat      get information on disk memory
  345.    DReadAbs      read absolute disk sector (drive <32M)
  346.    DReadAbsBig   read absolute disk sector (any size drive)
  347.    DriveSpace&   see how much space is free on a disk
  348.    DrvType       see if a drive is removeable and/or networked
  349.    DWriteAbs     write absolute disk sector (drive <32M)
  350.    DWriteAbsBig  write absolute disk sector (any size drive)
  351.    FDescRead$    read a 4DOS-style file description
  352.    FindFirstF    find the first file to match specs
  353.    FindFirstFx   find the first file to match specs
  354.    FindNextF     find any other files which match specs
  355.    FindNextFx    find any other files which match specs
  356.    Floppies      see how many floppy drives are attached
  357.    Floppies2%    see how many floppy drives are attached
  358.    FloppyType    see what types of floppy drives are installed
  359.    FReadLine     read a line of text from a file (LINE INPUT#)
  360.    GetAttrF      get attribute of a file matched by FindFirstF
  361.    GetAttrFx%    get attribute of a file matched by FindFirstFx
  362.    GetDateF      get date of a file matched by FindFirstF
  363.    GetDateFx$    get date of a file matched by FindFirstFx
  364.    GetDrive$     get the default drive
  365.    GetExecPath   get drive, subdir, name of current program
  366.    GetLabel      get a disk volume label
  367.    GetLogiDrive  get logical drive (useful for 1-floppy setups)
  368.    GetNameF      get the name of a file matched by FindFirstF
  369.    GetNameFx$    get the name of a file matched by FindFirstFx
  370.    GetPath       get the default drive and subdirectory
  371.    GetSerial     get a disk serial number
  372.    GetSizeFL     get the size of a file matched by FindFirstF
  373.    GetSizeFx&    get the size of a file matched by FindFirstFx
  374.    GetSub        get the default subdirectory
  375.    GetSub1       get the default subdirectory on a given drive
  376.    GetTimeF      get the time of a file matched by FindFirstF
  377.    GetTimeFx$    get the time of a file matched by FindFirstFx
  378.    GetVerify     determine status of the DOS "verify" setting
  379.    Heads%        get number of heads for a given drive
  380.    LoadDir       load names of matching files into an array
  381.    LoadDirAll    load all info about matching files into array
  382.    LogicalDrives% see how many logical drives are available
  383.    MakeSub       create a subdirectory
  384.    RenSub        rename a subdirectory
  385.    Retries       set the retries used for file networking
  386.    SDFlush       flush SMARTDRV disk caches
  387.    SDVersion     get SMARTDRV driver version
  388.    SDRCached%    see whether a drive is read cached by SMARTDRV
  389.    SDReset       reset SMARTDRV disk caches
  390.    SDStats       get SMARTDRV cache hit and miss information
  391.    SDWCached%    see whether a drive is write cached by SMARTDRV
  392.    SetDrv        set the default drive
  393.    SetLabel      set a disk volume label
  394.    SetLogiDrive  set logical drive (useful for 1-floppy setups)
  395.    SetPath       set the default drive and subdirectory
  396.    SetSub        set the default subdirectory
  397.    SetVerify     set the state of the DOS "verify" switch
  398.    SubExist      determine whether a subdirectory exists
  399.    SubExist2%    determine whether a subdirectory exists
  400.  
  401.                       Routine Reference
  402.  
  403.  
  404.  
  405. Display:
  406.    BigPrint      display text in huge letters
  407.    BkSpace       backspace destructively with wrap
  408.    BkScroll      scroll an area of the screen down
  409.    Blink         switch blinking vs. intense background colors
  410.    CalcAttr      calc color/attribute from fore & background
  411.    CalcAttr2%    calc color/attribute from fore & background
  412.    CalcSize      calc array size needed to save a screen area
  413.    CalcVGAColor  calculate a VGA palette color setting
  414.    ClearArea     clear an area of the screen w/ special effects
  415.    Clock         display a clock on the screen constantly
  416.    ClockSet      set various parameters for the clock
  417.    ClrCols       clear between specified columns on a row
  418.    ClrEOL        clear to the end of the row
  419.    ClrEOP        clear to the end of the screen
  420.    ClrSOL        clear to the start of the row
  421.    ClrSOP        clear to the start of the screen
  422.    CPrintScreen1 send a SCREEN 1 display to the printer
  423.    CPrintScreen2 send a SCREEN 2 display to the printer
  424.    CursorInfo    return cursor visibility, current & max sizes
  425.    CWindowManC   display pop-up window in CGA graphics mode
  426.    DClear        clear a display being kept in an array
  427.    DClearSS      clear a display of unusual size in an array
  428.    DelChr        delete a character from the screen
  429.    DelLine       delete a row from the screen
  430.    DGClear       clear a CGA virtual screen
  431.    DGetScreen    get an area of the screen into an array
  432.    DGQPrint      write to a CGA virtual screen (SCREEN 1 type)
  433.    DGXQPrint     write to a CGA virtual screen (SCREEN 2 type)
  434.    DGXQPrint1    write to a CGA virtual screen (SCREEN 2 type)
  435.    Dissolve      clear the screen with special effects
  436.    DMPrint       display text directly through DOS services
  437.    DOSClrEol     clear from the cursor to end of line via DOS
  438.    DOSCls        clears the screen using DOS output
  439.    DOSColor      sets the screen color using DOS output
  440.    DOSLocate     sets the cursor position using DOS output
  441.    DPutScreen    put an array onto an area of the screen
  442.    DRecolor      recolor text of a specified color in an array
  443.    DRecolorArea  recolor a block of text in an array
  444.    DScrRest      restore a saved screen from an array
  445.    DScrSave      save a screen to an array or other memory
  446.    DWindowMan    make a pop-up window in an array
  447.    DWindowMan2   pop-up window in an array (definable frames)
  448.    DWindowMan3   pop-up window in an array (array-based parms)
  449.    DWindowMan4   pop-up window in an array (spartan version)
  450.    DXQPrint      write text into an array
  451.    EGARest7      restore a saved screen to EGA SCREEN 7 display
  452.    EGARest8      restore a saved screen to EGA SCREEN 8 display
  453.    EGARest9      restore a saved screen to EGA SCREEN 9 display
  454.    EGASave7      save an EGA SCREEN 7 display to an array
  455.    EGASave8      save an EGA SCREEN 8 display to an array
  456.    EGASave9      save an EGA SCREEN 9 display to an array
  457.  
  458.                       Routine Reference
  459.  
  460.  
  461.  
  462. Display:
  463.    EWindowManC   display pop-up window on EGA/VGA graphics
  464.    EXQPrintC     display text at high speed on EGA/VGA graphics
  465.    FadeOut       clear the screen with special effects
  466.    GetColor      get the current colors being used by BASIC
  467.    GetCRT%       determine whether the display is color or mono
  468.    GetEGA        see if an EGA is in use and get info about it
  469.    GetEGA2%      see if an EGA is in use
  470.    GetHGA%       see if a Hercules mono adapter is in use
  471.    GetLine       get a row of text from virtual or saved screen
  472.    GetRows%      see how many rows are on the screen
  473.    GetScreen     get an area of the screen into an array
  474.    GetVGA        see if a VGA is in use
  475.    GetVGA2%      see if a VGA is in use
  476.    GetVGAColor   get the specified VGA palette setting
  477.    GetVGAPalette get the specified VGA palette settings
  478.    GetVidMode    get display mode and other screen info
  479.    GQPrint       display text quickly in CGA SCREEN 2 mode
  480.    GrafPrint     display sized text at graphics coordinates
  481.    GrafRest      restore a saved CGA graphics screen
  482.    GrafSave      save a CGA graphics screen to an array
  483.    GXQPrint      display text quickly in CGA SCREEN 1
  484.    GXQPrint1     display text quickly in CGA SCREEN 1
  485.    HCls          clear screen in Hercules graphics mode
  486.    HiLite        highlight text on the screen
  487.    HLine         draw a line in Hercules graphics mode
  488.    HMode         switch between text and Herc graphics modes
  489.    HPrint        display text in Hercules graphics mode
  490.    HSetPixel     plot a point in Hercules graphics mode
  491.    HTestPixel    get the color of a point in Herc graphics mode
  492.    InsChr        insert a space onto the screen
  493.    InsLine       insert a blank row onto the screen
  494.    LScroll       scroll an area of the screen left
  495.    MPrint        display text through DOS, obeying MWindow
  496.    MWindow       sets a display region for MPrint
  497.    PrintBox      display a box of characters or strings
  498.    PrintScreen   print the screen on a printer
  499.    PutScreen     put an array onto an area of the screen
  500.    QPrint        display text very quickly
  501.    ReadScreen    read a string from the screen
  502.    ReColor       change text of a selected color to a new color
  503.    ReColorArea   change text in a selected area to a new color
  504.    RScroll       scroll an area of the screen right
  505.    Scroll        scroll an area of the screen up
  506.    ScrRest       restore a saved screen from an array
  507.    ScrSave       save a screen to an array
  508.    SCrunch       compress an 80x25 text screen in an array
  509.    SCrunchSS     compress any size of text screen in an array
  510.    SetCGAColor   set various aspects of CGA colors
  511.    SetVGAColor   set the specified VGA palette info (1 color)
  512.    SetVGAPalette set the specified VGA palette info (1+ colors)
  513.    ShowBMP       display a Windows bitmap file (.BMP)
  514.    ShowIcon      display a Windows icon file (.ICO)
  515.    Split         clear the screen by scrolling different ways
  516.    TypePrint     display text as if it is being typed
  517.  
  518.                       Routine Reference
  519.  
  520.  
  521.  
  522. Display:
  523.    UnCalcAttr    convert color/attribute to fore & background
  524.    UnSCrunch     uncompress a "scrunched" screen (80x25 only)
  525.    UnSCrunchSS   uncompress a "scrunched" screen (any size)
  526.    UnSplit       restore saved screen by scroll. different ways
  527.    VerticalPrint display a string vertically
  528.    VGARest13     restore a saved screen in VGA SCREEN 13 mode
  529.    VGASave13     save a VGA SCREEN 13 display to an array
  530.    WindowMan     display a pop-up window
  531.    WindowMan2    display a pop-up window (user-defined frames)
  532.    WindowMan3    display a pop-up window (array-based parms)
  533.    WindowMan4    display a pop-up window (spartan version)
  534.    XMPrint       display text through DOS after translation
  535.    XQPrint       display text very quickly
  536.    XQPrintOver   quick text display, overlaying existing text
  537.  
  538. Equipment:
  539.    AllExtMem&    see how much extended memory was found at boot
  540.    BootDrive     determine the drive used to boot the computer
  541.    BootDrive2$   determine the drive used to boot the computer
  542.    CDROM         see if a CD-ROM is installed and get info
  543.    CPUSpeed%     get the CPU speed in MHz
  544.    Equipment     find out about basic equipment (ports, memory)
  545.    ExtMem        see how much extended memory is available
  546.    Floppies      see how many floppy drives are available
  547.    Floppies2%    see how many floppy drives are available
  548.    FloppyType    see what types of floppy drives are installed
  549.    Get4DOSv      get installed version of 4DOS, if any
  550.    GetCRT%       determine whether the display is color or mono
  551.    GetDOSv       get the DOS version
  552.    GetEGA        see if an EGA is in use and get info about it
  553.    GetEGA2%      see if an EGA is in use
  554.    GetExtM       see how much extended memory is available
  555.    GetHGA%       see if a Hercules mono adapter is in use
  556.    GetLIMm       see how much expanded memory is available
  557.    GetLIMv       get the EMS driver version
  558.    GetMouseVer   get mouse driver version and hardware info
  559.    GetVGA        see if a VGA is in use
  560.    GetVGA2%      see if a VGA is in use
  561.    GetXMSm       see how much XMS memory is available
  562.    GetXMSv       get the XMS driver version
  563.    KbdType       see if the keyboard is enhanced (101-key)
  564.    KbdType2%     see if the keyboard is enhanced (101-key)
  565.    LogicalDrives% see how many logical drives are available
  566.    MMCheck       see if a mouse is available and # of buttons
  567.    MMCheck2%     see if a mouse is available and # of buttons
  568.    NumProc       see what kind of numeric coprocessor is in use
  569.    NumProc2%     see what kind of numeric coprocessor is in use
  570.    PCDat$        get the date of the ROM BIOS
  571.    PCDate        get the date of the ROM BIOS
  572.    PCType        get the machine I.D. from the ROM BIOS
  573.    PCType2%      get the machine I.D. from the ROM BIOS
  574.    Processor     see what kind of CPU is in use
  575.    Processor2%   see what kind of CPU is in use
  576.    SDVersion     get SMARTDRV driver version
  577.    WinCheck      see what version of Windows is running, if any
  578.  
  579.                       Routine Reference
  580.  
  581.  
  582.  
  583. File:
  584.    BRead         read a byte from a file into an integer
  585.    BWrite        write a byte to a file from an integer
  586.    CloseA        close an archive opened by FindFirstA
  587.    CopyFile      copy a single file
  588.    DelFile       delete a file
  589.    DFRead        read from a file into an array or other mem.
  590.    DFWrite       write to a file from an array or other memory
  591.    Exist         see if a file exists
  592.    Exist2%       see if a file exists
  593.    ExplainFAttr$ return a text explanation of a file attribute
  594.    ExtendFSpec   check, complete, and format a filespec
  595.    FClose1       close a file
  596.    FCreate       create a file and open it for access
  597.    FGetLoc       get the position of a file pointer
  598.    FGetLoc2&     get the position of a file pointer
  599.    FileCopy      copy one or more files
  600.    FileCount     count the number of matching files
  601.    FileCRC       calculate a 32-bit CRC for a file
  602.    FindFirstA    find the first file in an archive
  603.    FindNextA     find any other files in an archive
  604.    FindPatch     find where to patch an .EXE
  605.    FLock         lock any part of a file
  606.    FlushToDisk   flush a file to disk (force it to be updated)
  607.    FOpen1        open a file
  608.    ForceMatch$   force a filename to match a wildcard pattern
  609.    FReadLine     read a line of text from an ASCII file
  610.    FSetEnd       move to the end of a file
  611.    FSetLoc       move to a specific location in a file
  612.    FSetOfs       move backwards or forwards within a file
  613.    FSetRec       move to a specific record location in a file
  614.    FSetSize      set the size of a file
  615.    FSize         get the size of a file
  616.    FSize2&       get the size of a file
  617.    FUnlock       unlock any part of a file (use w/ FLock)
  618.    GetCRCA       get CRC-16 of a file matched by FindFirstA
  619.    GetCRCAL      get CRC-32 of a file matched by FindFirstA
  620.    GetDateA      get date of a file matched by FindFirstA
  621.    GetFAttr      get attribute of a file
  622.    GetFDate      get the date of a file
  623.    GetFSize&     get the size of a file
  624.    GetFTime      get the time of a file
  625.    GetNameA      get the name of a file matched by FindFirstA
  626.    GetSizeAL     get the size of a file matched by FindFirstA
  627.    GetStoreA     get storage type of file matched by FindFirstA
  628.    GetTimeA      get the time of a file matched by FindFirstA
  629.    GLoad         load a binary image from a file (like BLOAD)
  630.    IdentifyFile  try to identify a file
  631.    IRead         read an integer from a file
  632.    IWrite        write an integer to a file
  633.  
  634.                       Routine Reference
  635.  
  636.  
  637.  
  638. File:
  639.    LIRead        read an integer from a file into a long int
  640.    LIWrite       write an integer to a file from a long integer
  641.    LRead         read a long integer from a file
  642.    LWrite        write a long integer to a file
  643.    MatchFile     see if a filename matches a wildcard filespec
  644.    ObjScan       scan an .OBJ file, return publics & externals
  645.    ParseFSpec    split filespec into drive, subdir, filename
  646.    PatchDone     terminates patching of an .EXE file
  647.    RandFile$     return a random file name
  648.    Rename        rename a file
  649.    SetFAttr      set the attribute of a file
  650.    SetFTD        set the time and date of a file
  651.    SetPatch      installs a patch into an .EXE file
  652.    SFRead        read from a file into a string
  653.    SFWrite       write from a string into a file
  654.    ShowBMP       display a Windows bitmap file (.BMP)
  655.    ShowIcon      display a Windows icon file (.ICO)
  656.  
  657.                       Routine Reference
  658.  
  659.  
  660.  
  661. Input:
  662.    AltKey        returns letter from ASCII & scan codes of key
  663.    BarMenu       bar menu (single row) for keyboard only
  664.    BarMenuM      bar menu (single row) for keyboard or mouse
  665.    BIOSInkey     get a key from BIOS if any is waiting
  666.    BoxMenu       box menu (single column) for picking one item
  667.    BoxMenu1      box menu (single column) for picking items
  668.    BreakCheck    see if Break has been pressed
  669.    BreakOff      make sure Break doesn't interrupt the program
  670.    BreakOffDone  remove Break handler
  671.    CheckKey      get a key if any is waiting, or a mouse button
  672.    CheckKey3     get a key if any is waiting, or a mouse button
  673.    ClrKbd        clear the keyboard buffer
  674.    CtrlKey       returns letter, given ASCII code of Ctrl key
  675.    DInput        formatted dollar input routine
  676.    DOSInkey      get a key from DOS if any is waiting
  677.    DOSInky$      get a key from DOS if any is waiting
  678.    EnhKbd        enable/disable enhanced keyboard handling
  679.    FileMenu      menu for picking a file
  680.    GetKbd        get state of keyboard toggles (CapsLock, etc)
  681.    GetKbd1       get state of shift keys (Control, Alt, etc)
  682.    GetKbd2       get state of shift keys (Left/Right Alt, etc)
  683.    GetKey        get a key or mouse click (wait; 2-button)
  684.    GetKey3       get a key or mouse click (wait; 3-button)
  685.    GetPrtSc%     get whether Print Screen was pressed
  686.    GetValidKey   get one of a list of valid keys
  687.    JButtonA1%    get state of joystick A button 1
  688.    JButtonA2%    get state of joystick A button 2
  689.    JButtonB1%    get state of joystick B button 1
  690.    JButtonB2%    get state of joystick B button 2
  691.    JButtons      get state of all joystick buttons
  692.    JPos          get X,Y positions of joysticks
  693.    KbdType       see if the keyboard is enhanced (101-key)
  694.    KbdType2%     see if the keyboard is enhanced (101-key)
  695.    KeyPress      see if a key is waiting to be retrieved
  696.    PrtSc         disable the PrtSc/PrintScreen key
  697.    ScanKey       get a key, if any, w/o taking it from buffer
  698.    SetKbd        set state of keyboard toggles (CapsLock, etc)
  699.    SetMouseLoc   set the mouse cursor position (text mode)
  700.    SInput        flexible replacement for LINE INPUT
  701.    SInputSet     set SInput parms (fill, exitmode, beeps, fast)
  702.    SInputSet1    set SInput parms (cursor position, full exit)
  703.    SInputSet2    set SInput parms (capitalize, tab exit)
  704.    SpeedKey      change the keyboard repeat rate
  705.    TypeIn        stuff keys into buffer as if they were typed
  706.  
  707.                       Routine Reference
  708.  
  709.  
  710.  
  711. Memory:
  712.    BlockMove     copy data from one area of memory to another
  713.    DataSeg       determine the default data segment (dgroup)
  714.    DataSeg2%     determine the default data segment (dgroup)
  715.    EMSBuffer     get the bytes needed to save EMS array state
  716.    EMSClose      close an EMS array
  717.    EMSGet        get an element from an EMS array
  718.    EMSOpen       create an EMS array
  719.    EMSPut        put an element into an EMS array
  720.    EMSRest       restore the EMS array state
  721.    EMSSave       save the EMS array state
  722.    ExtGet        get data from extended memory
  723.    ExtMem        see how much extended memory is available
  724.    ExtPut        put data into extended memory
  725.    FarPeek%      get byte from memory (like PEEK w/o DEF SEG)
  726.    FarPeekI%     get word from memory (like two PEEKs)
  727.    FarPeekL&     get dword from memory (like four PEEKs)
  728.    FarPoke       put byte into memory (like POKE w/o DEF SEG)
  729.    FarPokeI      put word into memory (like two POKEs)
  730.    FarPokeL      put dword into memory (like four POKEs)
  731.    GetExtM       see how much extended memory is available
  732.    GetLIMHandles get the number of EMS handles being used
  733.    GetLIMm       see how much expanded memory is available
  734.    GetLIMv       get the EMS driver version
  735.    GetMemBox     get location and size of MEMBOX TSR memory
  736.    GetPSP%       get the segment of the Program Segment Prefix
  737.    GetXMSm       see how much XMS memory is available
  738.    GetXMSv       get the EMS driver version
  739.    LClose        close a block of expanded memory
  740.    LGet          get a block of data from expanded memory
  741.    LOpen         open a block of expanded memory
  742.    LPut          put a block of data into expanded memory
  743.    MemSwap       swap contents of one area of memory w/ another
  744.  
  745. Miscellaneous:
  746.    CreditCard$   see if a credit card number is maybe valid
  747.    Command2$     get the original DOS command line
  748.    DOSErrM$      convert a DOS error code into a text message
  749.    DOSInt%       execute a DOS function (like CALL INTERRUPT)
  750.    DupeVar       copy a TYPEd variable into a different TYPE
  751.    CatchError    set up to grab exit code from SHELLed program
  752.    GetError      get the exit code from a SHELLed program
  753.    GetError2%    get the exit code from a SHELLed program
  754.    GetSwitch$    get the DOS switch character
  755.    HandleInfo    see if a handle refers to a file or a device
  756.    IntVector     get the address of an interrupt handler
  757.    Reboot        boot the computer (like Control-Alt-Del)
  758.    RedirectIn    see whether input has been redirected
  759.    RedirectOut   see whether output has been redirected
  760.    SetError      set exit code to return when program ends
  761.    TVIdle        return clock ticks to TopView, DESQview, et al
  762.  
  763.                       Routine Reference
  764.  
  765.  
  766.  
  767. Mouse:
  768.    CheckKey      get a key if any is waiting, or a mouse button
  769.    CheckKey3     get a key if any is waiting, or a mouse button
  770.    GetKey        get key or mouse click (wait for it; 2-button)
  771.    GetKey3       get key or mouse click (wait for it; 3-button)
  772.    GetMouseLoc   get the mouse cursor position (text mode)
  773.    GetMouseVer   get mouse driver version and hardware info
  774.    LClickLoc     get mouse position at last left click
  775.    MClickLoc     get mouse position at last middle click
  776.    MMButton      see which mouse buttons are pressed (2-button)
  777.    MMButton3     see which mouse buttons are pressed (3-button)
  778.    MMCheck       see if a mouse is installed & no. of buttons
  779.    MMCheck2%     see if a mouse is installed & no. of buttons
  780.    MMClick       see which buttons have been pressed (2-button)
  781.    MMClick3      see which buttons have been pressed (3-button)
  782.    MMCursorOff   make the mouse cursor invisible
  783.    MMCursorOn    make the mouse cursor visible
  784.    MMGetLoc      get the mouse cursor position
  785.    MMSetLoc      set the mouse cursor position
  786.    MMSetRange    set the allowable range of the mouse cursor
  787.    MouseBuffer   get no. of bytes needed to save mouse state
  788.    MouseCursor   set the mouse graphics cursor type
  789.    MousePen      turn light pen emulation by the mouse on/off
  790.    MouseRest     restore a saved mouse state
  791.    MouseSave     save the current state of the mouse
  792.    RClickLoc     get mouse position at last right click
  793.    SetMouseLoc   set the mouse cursor position (text mode)
  794.  
  795.                       Routine Reference
  796.  
  797.  
  798.  
  799. Numeric:
  800.    Any2Dec       convert a number from any base into an integer
  801.    CeilD#        return the smallest integer >= number
  802.    CeilS!        return the smallest integer >= number
  803.    Dec2Any       convert an integer to any base
  804.    FloorD#       return the largest integer <= number
  805.    FloorS#       return the largest integer <= number
  806.    HiByte%       return the high byte of an integer
  807.    HiWord%       return the high word of a long integer
  808.    IVal%         convert a string to an integer
  809.    KVal%         convert a string to a long integer / 1024
  810.    LoByte%       return the low byte of an integer
  811.    LoWord%       return the low word of a long integer
  812.    LVal%         convert a string to a long integer
  813.    Max%          return the greater of two integers
  814.    MaxD#         return the greater of two double-prec. numbers
  815.    MaxL&         return the greater of two long integers
  816.    MaxS!         return the greater of two single-prec. numbers
  817.    Min%          return the smaller of two integers
  818.    MinD#         return the smaller of two double-prec. numbers
  819.    MinL&         return the smaller of two long integers
  820.    MinS!         return the smaller of two single-prec. numbers
  821.    Num2Phone$    convert a compressed phone number to a string
  822.    NumFormat     format a number as a string, like PRINT USING
  823.    Odd%          return whether an integer is odd
  824.    OddL%         return whether a long integer is odd
  825.    Phone2Num&    compress a phone number into a long integer
  826.    Rand%         return pseudo-random number in specified range
  827.    ReadBitF      read value of given bit length from an array
  828.    RndI%         return pseudo-random number in specified range
  829.    RotateL       rotate the bits in an integer left
  830.    RotateLL      rotate the bits in a long integer left
  831.    RotateR       rotate the bits in an integer right
  832.    RotateRL      rotate the bits in a long integer right
  833.    SetBit        set a specified bit in an integer
  834.    ShiftL        shift the bits in an integer left
  835.    ShiftLL       shift the bits in a long integer left
  836.    ShiftR        shift the bits in an integer right
  837.    ShiftRL       shift the bits in a long integer right
  838.    WriteBitF     write value of given bit length into an array
  839.  
  840. Printer:
  841.    CPrintScreen1 send a SCREEN 1 display to the printer
  842.    CPrintScreen2 send a SCREEN 2 display to the printer
  843.    GetPrtAddr    get the address of a printer port
  844.    PrinterReady% see if a printer is ready
  845.    PrinterInit   initialize a printer
  846.    PrintFile     send a file to the printer
  847.    PrintScreen   print the screen on the printer
  848.    PrtSc         disable the PrtSc/PrintScreen key
  849.    PrtSwap       swap any two printer ports
  850.    SetPrtAddr    set the address of a printer port
  851.    Spooler       see if DOS print spooler (PRINT.COM) is loaded
  852.  
  853.                       Routine Reference
  854.  
  855.  
  856.  
  857. Serial:
  858.    Carrier       determine if a carrier is present
  859.    CheckCAS%     determine if a CAS driver is present
  860.    Checksum      calculate an 8-bit checksum for a string
  861.    Checksum2%    calculate an 8-bit checksum for a string
  862.    CRC           calculate a 16-bit CRC for a string (obsolete)
  863.    CRC1          calculate a 16-bit CRC for a string
  864.    CRC32Calc     calculate a 32-bit CRC for a string
  865.    CRC32Done%    return a 32-bit CRC for a string
  866.    CRC32Init     initialize 32-bit CRC string calculations
  867.    DTR           set the state of the DTR line
  868.    GetCommAddr   get the address of a comm port
  869.    SetComm       set communications parameters
  870.    SetCommAddr   set the address of a comm port
  871.  
  872.  
  873.  
  874. SoundBlaster:
  875.    SBFreeHandles% get number of free SBSIM XMS handles
  876.    SBFreeXMS     release an SBSIM XMS handle
  877.    SBGetActive   get which devices are active
  878.    SBGetDrivers  get which devices are currently supported
  879.    SBGetVer      get SBSIM driver version number
  880.    SBGetVolume   get volume levels for a sound source
  881.    SBInitSrcFile initialize SBSIM to read from a sound file
  882.    SBInitSrcXMS  initialize SBSIM to load a .VOC into XMS
  883.    SBInt%        get SBSIM interrupt (0 if not installed)
  884.    SBIsFree%     get whether an SBSIM XMS handle is in use
  885.    SBLoadXMS     load a .VOC file into XMS memory
  886.    SBMapMIDI     set MIDI mapping
  887.    SBPause       pause the playing of a sound
  888.    SBPlay        play a sound
  889.    SBResume      resume playing a sound (used after SBPause)
  890.    SBSetVolume   set volume level of a sound source
  891.    SBStatus%     get status of a driver
  892.    SBStop        stop playing a sound
  893.  
  894.                       Routine Reference
  895.  
  896.  
  897.  
  898. String:
  899.    AndSt         AND the bytes in two strings together
  900.    AscI%         get the ASCII value of a character (like ASC)
  901.    AscM%         get the ASCII value of any char in a string
  902.    Bickel        compare two strings using Bickel's algorithm
  903.    Bickel2%      compare two strings using Bickel's algorithm
  904.    BSq           compress the blanks out of a text string
  905.    BUsq          restore a string that was compressed by BSq
  906.    BUsqLen       determine expanded length of a BSq'ed string
  907.    CenterSt$     center a string
  908.    Checksum      calculate an 8-bit checksum for a string
  909.    Checksum2%    calculate an 8-bit checksum for a string
  910.    Cipher        perform simple string encryption/decryption
  911.    CipherP       like Cipher, only the results are printable
  912.    CRC           calculate a 16-bit CRC for a string (obsolete)
  913.    CRC1          calculate a 16-bit CRC for a string
  914.    CRC32Calc     calculate a 32-bit CRC for a string
  915.    CRC32Done%    return a 32-bit CRC for a string
  916.    CRC32Init     initialize 32-bit CRC string calculations
  917.    Crunch        remove repeated values from a string
  918.    DGetRec       get a string from memory in a record format
  919.    DGetSt        get string from numeric array or other memory
  920.    DPutRec       put a string into memory in a record format
  921.    DPutSt        put string into numeric array or other memory
  922.    ExtendFSpec   check, complete, and format a filespec
  923.    Extract       extract a delimited substring from a string
  924.    ForceMatch$   force a filename to match a wildcard pattern
  925.    FormatPhone$  format a phone number
  926.    FromPostal$   convert a postal abbreviation to a state name
  927.    IsAlNum%      test whether a char. is alphabetic or numeric
  928.    IsAlpha%      test whether a character is alphabetic
  929.    IsASCII%      test whether a character is ASCII
  930.    IsCntrl%      test whether a character is a control code
  931.    IsDigit%      test whether a character is a digit
  932.    IsLower%      test whether a char. is lowercase alphabetic
  933.    IsPrint%      test whether a character is printable
  934.    IsPunct%      test whether a character is punctuation
  935.    IsSpace%      test whether a character is white space
  936.    IStr$         convert an integer to a string (like STR$)
  937.    IStrNB$       convert an integer to a string w/o blank
  938.    IsUpper%      test whether a char. is uppercase alphabetic
  939.    IsXDigit%     test whether a char. is a hexadecimal digit
  940.    Locase        convert a string to lowercase (U.S. only)
  941.    Locase1       convert a string to lowercase (international)
  942.    LRotate       rotate the characters in a string left once
  943.    MatchFile     see if filename matches a wildcard filespec
  944.    Month0        return the name of the month, given month no.
  945.    MultiAND      perform an arithmetic AND operation on string
  946.    MultiOR       perform an arithmetic OR operation on a string
  947.    MultiXOR      perform an arithmetic XOR operation on string
  948.  
  949.                        Routine Reference
  950.  
  951.  
  952.  
  953. String:
  954.    NameCase      capitalize a string correctly for a name
  955.    NameCase2$    capitalize a string correctly for a name
  956.    Num2Phone$    convert a compressed phone number to a string
  957.    OrSt          OR bytes in one string with those in another
  958.    Phone2Num&    compress a phone number into a long integer
  959.    Replace       replace one character with another
  960.    ReplaceSt     replace one substring with another
  961.    Reverse       reverse a string
  962.    RInstr        find last occurrence of substring w/in string
  963.    RolSt         rotate the bits in a string left
  964.    RorSt         rotate the bits in a string right
  965.    RRotate       rotate the characters in a string right once
  966.    SFRead        read a string from a file
  967.    SFWrite       write a string to a file
  968.    ShlSt         shift the bits in a string left
  969.    ShrSt         shift the bits in a string right
  970.    ShuffleSt     shuffle the characters in a string
  971.    Soundex       determine what a string "sounds" like
  972.    SSrch         see if one string is within another
  973.    StrDel        delete a character from a string
  974.    StrIns        insert a space into a string
  975.    Strip         strip the blanks from both sides of a string
  976.    Strip2$       strip the blanks from both sides of a string
  977.    StripBlanks   strip the blanks from side(s) of a string
  978.    StripChar     strip a specified list of chars from a string
  979.    StripRange    strip a specified range of chars from a string
  980.    StripSpaces   strip the spaces from side(s) of a string
  981.    StrSqu$       compress text string using 2&3-gram compress.
  982.    StrSqu2       compress text string using 2-gram compression
  983.    StrSqu3       compress text string using 3-gram compression
  984.    StrSquLen2    determine 2-gram compressed length of string
  985.    StrSquLen3    determine 3-gram compressed length of string
  986.    StrUnsq$      uncompress a 2 & 3-gram compressed string
  987.    StrUnsqu2     uncompress a 2-gram compressed string
  988.    StrUnsqu3     uncompress a 3-gram compressed string
  989.    StrUnsquLen2  calc full length of 2-gram compressed string
  990.    StrUnsquLen3  calc full length of 3-gram compressed string
  991.    TInstr        search for a specific kind of char in a string
  992.    ToPostal$     convert state name to its postal abbreviation
  993.    Upcase        convert a string to uppercase (U.S. only)
  994.    Upcase1       convert a string to uppercase (international)
  995.    UpcaseI       convert an ASCII code to uppercase (U.S. only)
  996.    UpcaseI1      convert ASCII to uppercase (international)
  997.    ValidSt%      see if a string contains only approved chars
  998.    Xlate         run each char of a string through translation
  999.    XorSt         XOR bytes in one string with those in another
  1000.  
  1001.                        Routine Reference
  1002.  
  1003.  
  1004.  
  1005. Time:
  1006.    CalcDate      get date a number of days from a starting date
  1007.    CheckDate     check a date to determine whether it is valid
  1008.    Clock         display a clock on the screen, constantly
  1009.    ClockSet      set the parameters for the clock
  1010.    Date2Int      squash a date into a single integer
  1011.    DateA2R       convert a date to a number you can calc with
  1012.    DateN2S       convert a date from numbers into a string
  1013.    DateR2A       convert a number to a date
  1014.    DateS2N       convert a date from string form into numbers
  1015.    DCal          draw a calendar into an array for ScrRest
  1016.    DCalendar     draw a calendar & let user to select date
  1017.    Delay         delay for a given number of seconds
  1018.    Delay18th     delay for a given number of 18ths of seconds
  1019.    DelayV        delay for a very small amount of time
  1020.    Elapsed       determine the elapsed time between two times
  1021.    ElapsedTime$  determine the elapsed time between two times
  1022.    EuropeDate    convert a date to European format
  1023.    FormatDate    convert a date to any desired format
  1024.    GetDateA      get the date of a file matched by FindFirstA
  1025.    GetDateAT     get the date from the AT hardware clock
  1026.    GetDateF      get date of a file matched with FindFirstF
  1027.    GetDateFx$    get date of a file matched with FindFirstFx
  1028.    GetFDate      get the date of a file
  1029.    GetFTime      get the time of a file
  1030.    GetTick&      get timer tick count (1/18th seconds)
  1031.    GetTime       get time from DOS, including 100th seconds
  1032.    GetTimeA      get the time of a file matched by FindFirstA
  1033.    GetTimeAT     get the time from the AT hardware clock
  1034.    GetTimeF      get time of a file matched with FindFirstF
  1035.    GetTimeFx$    get time of a file matched with FindFirstFx
  1036.    Int2Date      unsquash date from single integer to numbers
  1037.    Int2DateSt$   unsquash date from single integer to string
  1038.    Int2Time      unsquash time from single integer to numbers
  1039.    Int2TimeSt$   unsquash time from single integer to string
  1040.    Month0        return name of month, given the month number
  1041.    Sec2Time$     convert seconds past midnight to time string
  1042.    SetDateAT     set the date of the AT hardware clock
  1043.    SetTimeAT     set the time of the AT hardware clock
  1044.    Time2Int      squash a time into a single integer
  1045.    Time2Sec&     convert time string to seconds past midnight
  1046.    TimeN2S       convert a time from numbers into a string
  1047.    TimeS2N       convert a time from a string into numbers
  1048.    WeekDay0      get the day of the week
  1049.    WeekDay1      returns the day of the week for a given date
  1050.  
  1051.                       Enhanced Key Codes
  1052.  
  1053.  
  1054.  
  1055. This is a list of the new key codes available when you use
  1056. EnhKbd to enable enhanced keyboard support. Note that the codes
  1057. are direct from the BIOS, and may not always match what INKEY$
  1058. returns. QuickBasic 4.5 provides only minimal support for the
  1059. enhanced keys; QBX does much better. As long as you use PBClone
  1060. for input, of course, you don't have to worry about it.
  1061.  
  1062. The format used is ScanCode, ASCIIcode.
  1063.  
  1064.  
  1065. Middle keypad key (num lock off):   0,76
  1066. Middle key, with Control:           0,143
  1067.  
  1068.              plain     shift     control     alt
  1069.              -----     -----     -------    -----
  1070.    F11       0,133     0,135      0,137     0,139
  1071.    F12       0,134     0,136      0,138     0,140
  1072.  
  1073. The middle cursor pad returns the same scan codes as the
  1074. cursor/numeric pad when NumLock is off, but with an ASCII code
  1075. of 224 instead of 0. If you want the middle cursor pad and
  1076. cursor/numeric pad to return the same values, you should have
  1077. your code do this:
  1078.  
  1079.    ' ...get key code...
  1080.    IF ASCIIcode = 224 AND ScanCode <> 0 THEN ASCIIcode = 0
  1081.  
  1082. Why test both ASCII and scan codes? Because it is possible for
  1083. the user to enter a plain 224 by holding ALT and using the
  1084. numeric keypad, which could cause confusion.
  1085.  
  1086. The arrows in the middle cursor pad will return special codes if
  1087. pressed in combination with an ALT key:
  1088.  
  1089.    up    arrow     0,152
  1090.    down  arrow     0,160
  1091.    left  arrow     0,155
  1092.    right arrow     0,157
  1093.  
  1094. Finally, the arrow keys on either cursor pad will return special
  1095. codes if pressed in combination with a CONTROL key:
  1096.  
  1097.                    middle pad     cursor/num pad
  1098.                    ----------     --------------
  1099.    up    arrow       224,141          0,141
  1100.    down  arrow       224,145          0,145
  1101.    left  arrow       224,115          0,115
  1102.    right arrow       224,116          0,116
  1103.  
  1104.                         DOS Error Codes
  1105.  
  1106.  
  1107.  
  1108. Note that the number of error codes available depends on the
  1109. version of DOS in use. Older versions return fewer error codes,
  1110. meaning that the nature of the error may not be specified as
  1111. precisely as you might like. This is not a complete list of all
  1112. possible codes, but it covers the most common ones.
  1113.  
  1114. The DOSErrM$ function can be used to generate a complete error
  1115. list if needed, current at least through DOS 3.31. If later
  1116. versions of DOS have new error codes, I'm not aware of 'em.
  1117.  
  1118.  
  1119.   -1    Unable to read or write all of the data requested
  1120.    0    No error
  1121.    1    Invalid function number
  1122.    2    File not found
  1123.    3    Path not found
  1124.    4    No handle available (too many files open)
  1125.    5    Access denied (file already in use or "read only")
  1126.    6    Invalid handle
  1127.    8    Insufficient memory
  1128.   15    Invalid disk drive
  1129.   16    Attempt to remove current directory
  1130.   18    No more matching files
  1131.   19    Disk is write-protected
  1132.   20    Unknown unit
  1133.   21    Drive not ready
  1134.   22    Invalid command
  1135.   23    Data CRC error
  1136.   25    Seek error
  1137.   26    Disk is not in DOS format
  1138.   27    Sector not found
  1139.   28    Printer is out of paper
  1140.   29    Write fault
  1141.   30    Read fault
  1142.   31    General failure
  1143.   32    Sharing violation
  1144.   33    Lock violation
  1145.   34    Invalid disk change
  1146.   35    No FCB available
  1147.   36    No room in file sharing buffer
  1148.   39    Out of disk space
  1149.   80    File already exists
  1150.   82    Unable to create subdirectory
  1151.   86    Invalid password
  1152.   90    Required system component not installed
  1153.  
  1154.